﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Ext.Net;
using System.Xml;
using System.Configuration;
using ENT.GP.Core.Core;
using System.Web.Script.Services;

namespace entgp.Usuarios
{
    /// <summary>
    /// Summary description for TreeLoaderService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class TreeLoaderService : System.Web.Services.WebService
    {

        [WebMethod()]
        public TreeNodeCollection GetNodes()
        {
                
                TreeNodeCollection nodes = new TreeNodeCollection(false);
                //Lectura del xml
                XmlDocument xmlArbol = new XmlDocument();
                var ruta = "";
                ruta = string.Format("{0}/resources/arbol{1}.xml", ConfigurationManager.AppSettings.Get("SD"),"TPL");

                xmlArbol.Load(HttpContext.Current.Server.MapPath(ruta));
                XmlNodeList nodoslista = xmlArbol.GetElementsByTagName("nodo");
                XmlNode nodeParent = xmlArbol.SelectSingleNode("//nodos/nodo");


                string testChk = nodeParent.Attributes["checked"].Value;
                //testChk = "true";
             
                //Recorrido de los modulos principales y creación de los TreePanel
                XmlNodeList modulos = nodoslista[0].ChildNodes;
                foreach (XmlElement modulo in modulos)
                {
                    TreeNode treeNode = new TreeNode();
                    treeNode.Text = modulo.GetAttribute("nombre");
                    treeNode.NodeID = modulo.GetAttribute("idnodo");
                    treeNode.Expanded = true;
                    treeNode.Leaf = false;
                    this.ConstruirArbol(xmlArbol, treeNode, modulo,testChk);
                    nodes.Add(treeNode);
                     
                }

           
            return nodes;
        }

        //Función para construir los nodos de los arboles de navegación
        //Parametros de entrada: nodes = nodo de root de arbol a costruir, idnodobase = codigo del nodo que sera el padre principal
        private Ext.Net.TreeNodeCollection ConstruirArbol(XmlDocument xDoc, Ext.Net.TreeNode root,  XmlElement nodosarbol,string ifChk)
        {
            try
            {
                           
                //Obtención de los hijos del nodo
                if (nodosarbol!=null)
                {
                    XmlNodeList listamodulos = nodosarbol.ChildNodes;
                    //Recorrido de cada uno de los hijos
                    foreach (XmlElement nodoshijos1 in listamodulos)
                    {

                        //Creación de un nuevo nodo y asignacion de las propiedades
                        var nuevonodo = new Ext.Net.TreeNode();
                        nuevonodo.Text = nodoshijos1.GetAttribute("nombre");
                        nuevonodo.NodeID = nodoshijos1.GetAttribute("idnodo");
                        if (ifChk=="true")
                        {
                            if (nodoshijos1.GetAttribute("checked") == "false")
                                nuevonodo.Checked = ThreeStateBool.False;
                            else
                                nuevonodo.Checked = ThreeStateBool.True;
                        }
                        else
                        {
                            nuevonodo.Checked = ThreeStateBool.False;
                        }
                        nuevonodo.Leaf = true;
                        root.Nodes.Add(nuevonodo);

                    }
                }
            }
            catch //()//Exception ex
            {
                //Util.RegistarLog(ex.Message);
            }
            return null;
        }


    }
}
